const viewCfg = require('./viewCfg.json');
const YoloDetector = require('./yolo');
const APP = require('./APP');
class GameClient {
    // 脚本版本
    version = 2;
    // 是否连接
    isConnected = false;
    view = null;
    /**
     * 启动中
     * 游戏中
     * 匹配中
     * 结算中
     */
    state = '启动中';
    taskList = [];
    // 微信（ios） QQ(ios)
    loginInfo = {
        type:'qq',
        // 手机平台 ios android
        phone:'ios',

    }
    userInfo = {
        // 0  排位 1 匹配 2 狂暴模式
        loopGameTyle:'时空裂痕',
        // 玩法
        loopGameItem:'标准匹配'
    }
    constructor() {
        console.log('版本号', this.version);
       
    }
    // 初始化
    async init(androidBot) {
        this.androidBot = androidBot;
        let ocrJude = await this.androidBot.initOcr('192.168.1.8',{enableGPU:true});
        console.log('ocr初始化',ocrJude);
        console.log('客户端初始化');
        this._init_listen();
        let _package = await this.androidBot.getPackage();
        console.log('当前包名',_package);
        this.runTask_before();

    }

    async runTask_before() {
        // 分析页面内容
        let isGame = false;
        let isRun = await this.androidBot.appIsRunnig('com.tencent.jkchess');
        console.log('游戏是否运行', isRun);
        // this.addTask({name:'checkPop'});
        // await this.addTask({name:'game'});
        // await this.androidBot.home();
        await this.addTask({name:'login_to_home'});
        this.startTaskLoop();
    }
    // 获取当前activity
    async get_activity() {
        let data = await this.androidBot.getWindowSize();
        console.log(data);
        if (data.width < data.height) {
            console.log('竖屏模式');
        } else {
            console.log('横屏模式');
        }
    }
    async startTaskLoop(){
        let Done = false;
        while(!Done){
            // 一直执行
            if(!this.taskList[0]){
                console.log('任务列表为空');
                break;
            }
            let data = await YoloDetector.screen(this.androidBot);
            if(APP.findClass_index(data, 'loding')){
                await APP.sleep(1500);
                continue;
            }

            console.log('执行任务',this.taskList[0].name);
            await this.runTask(this.taskList[0]);
            console.log('执行任务完成',this.taskList[0].name);
            // 执行完删除 第0个任务
            this.taskList.splice(0,1);
            if(this.taskList.length === 0){
                Done = true;
                console.info('全部任务执行完毕');
            }
        }
    }
    // 在任务数组0位置添加任务
    async addTask(data){
        this.taskList.push(data);
        console.log('添加任务',data,this.taskList.map(item => item.name));

    }
    async runTask(data) {
        try{
            delete require.cache[require.resolve(`./func/${data.name}`)];
            const func = require(`./func/${data.name}`);
            let funcInstance = new func(this);
            let jude = await funcInstance.run();
            console.log(`任务:${data.name} 执行 ${jude ? '成功' : '失败'}`);
            APP.sleep()
        }catch(e){
            console.error('任务执行失败',e);
            suocidebugger;
        }
    }
    async _init_listen() {
        this.androidBot.socket.on('close', () => {
            this.isConnected = false;
            console.log('业务 逻辑 AndroidBot连接已关闭');
        });
    }
    async get_viewInfo() {
        //成功返回当前activity
        console.log('获取当前activity');
        let activity = await this.androidBot.getActivity();
        //成功返回当前package
        let _package = await this.androidBot.getPackage();

        // let viewInfo = viewCfg.find(item => item.package === _package);
        // if (viewInfo) {
        //     let activityInfo = viewInfo.activity.find(item => item.type === activity);
        //     console.log(activityInfo);
        //     this.view = new (require(`./view/${viewInfo.view}`))(this.androidBot);
        //     this.view.init();
        // } else {
        //     console.log('未找到对应的视图信息', _package, activity);
        // }
    }

}

module.exports = GameClient;
